//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2021 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto/tree/main/CodeGenerator. DO NOT EDIT.

@_exported import SotoCore

/// Service object for interacting with AWS Pinpoint service.
///
/// Doc Engage API - Amazon Pinpoint API
public struct Pinpoint: AWSService {
    // MARK: Member variables

    /// Client used for communication with AWS
    public let client: AWSClient
    /// Service configuration
    public let config: AWSServiceConfig

    // MARK: Initialization

    /// Initialize the Pinpoint client
    /// - parameters:
    ///     - client: AWSClient used to process requests
    ///     - region: Region of server you want to communicate with. This will override the partition parameter.
    ///     - partition: AWS partition where service resides, standard (.aws), china (.awscn), government (.awsusgov).
    ///     - endpoint: Custom endpoint URL to use instead of standard AWS servers
    ///     - timeout: Timeout value for HTTP requests
    public init(
        client: AWSClient,
        region: SotoCore.Region? = nil,
        partition: AWSPartition = .aws,
        endpoint: String? = nil,
        timeout: TimeAmount? = nil,
        byteBufferAllocator: ByteBufferAllocator = ByteBufferAllocator(),
        options: AWSServiceConfig.Options = []
    ) {
        self.client = client
        self.config = AWSServiceConfig(
            region: region,
            partition: region?.partition ?? partition,
            service: "pinpoint",
            signingName: "mobiletargeting",
            serviceProtocol: .restjson,
            apiVersion: "2016-12-01",
            endpoint: endpoint,
            serviceEndpoints: ["us-east-1": "pinpoint.us-east-1.amazonaws.com", "us-gov-west-1": "pinpoint.us-gov-west-1.amazonaws.com", "us-west-2": "pinpoint.us-west-2.amazonaws.com"],
            errorType: PinpointErrorType.self,
            timeout: timeout,
            byteBufferAllocator: byteBufferAllocator,
            options: options
        )
    }

    // MARK: API Calls

    ///  Creates an application.
    public func createApp(_ input: CreateAppRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<CreateAppResponse> {
        return self.client.execute(operation: "CreateApp", path: "/v1/apps", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Creates a new campaign for an application or updates the settings of an existing campaign for an application.
    public func createCampaign(_ input: CreateCampaignRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<CreateCampaignResponse> {
        return self.client.execute(operation: "CreateCampaign", path: "/v1/apps/{application-id}/campaigns", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Creates a message template for messages that are sent through the email channel.
    public func createEmailTemplate(_ input: CreateEmailTemplateRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<CreateEmailTemplateResponse> {
        return self.client.execute(operation: "CreateEmailTemplate", path: "/v1/templates/{template-name}/email", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Creates an export job for an application.
    public func createExportJob(_ input: CreateExportJobRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<CreateExportJobResponse> {
        return self.client.execute(operation: "CreateExportJob", path: "/v1/apps/{application-id}/jobs/export", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Creates an import job for an application.
    public func createImportJob(_ input: CreateImportJobRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<CreateImportJobResponse> {
        return self.client.execute(operation: "CreateImportJob", path: "/v1/apps/{application-id}/jobs/import", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Creates a journey for an application.
    public func createJourney(_ input: CreateJourneyRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<CreateJourneyResponse> {
        return self.client.execute(operation: "CreateJourney", path: "/v1/apps/{application-id}/journeys", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Creates a message template for messages that are sent through a push notification channel.
    public func createPushTemplate(_ input: CreatePushTemplateRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<CreatePushTemplateResponse> {
        return self.client.execute(operation: "CreatePushTemplate", path: "/v1/templates/{template-name}/push", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Creates an Amazon Pinpoint configuration for a recommender model.
    public func createRecommenderConfiguration(_ input: CreateRecommenderConfigurationRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<CreateRecommenderConfigurationResponse> {
        return self.client.execute(operation: "CreateRecommenderConfiguration", path: "/v1/recommenders", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Creates a new segment for an application or updates the configuration, dimension, and other settings for an existing segment that's associated with an application.
    public func createSegment(_ input: CreateSegmentRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<CreateSegmentResponse> {
        return self.client.execute(operation: "CreateSegment", path: "/v1/apps/{application-id}/segments", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Creates a message template for messages that are sent through the SMS channel.
    public func createSmsTemplate(_ input: CreateSmsTemplateRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<CreateSmsTemplateResponse> {
        return self.client.execute(operation: "CreateSmsTemplate", path: "/v1/templates/{template-name}/sms", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Creates a message template for messages that are sent through the voice channel.
    public func createVoiceTemplate(_ input: CreateVoiceTemplateRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<CreateVoiceTemplateResponse> {
        return self.client.execute(operation: "CreateVoiceTemplate", path: "/v1/templates/{template-name}/voice", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Disables the ADM channel for an application and deletes any existing settings for the channel.
    public func deleteAdmChannel(_ input: DeleteAdmChannelRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<DeleteAdmChannelResponse> {
        return self.client.execute(operation: "DeleteAdmChannel", path: "/v1/apps/{application-id}/channels/adm", httpMethod: .DELETE, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Disables the APNs channel for an application and deletes any existing settings for the channel.
    public func deleteApnsChannel(_ input: DeleteApnsChannelRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<DeleteApnsChannelResponse> {
        return self.client.execute(operation: "DeleteApnsChannel", path: "/v1/apps/{application-id}/channels/apns", httpMethod: .DELETE, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Disables the APNs sandbox channel for an application and deletes any existing settings for the channel.
    public func deleteApnsSandboxChannel(_ input: DeleteApnsSandboxChannelRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<DeleteApnsSandboxChannelResponse> {
        return self.client.execute(operation: "DeleteApnsSandboxChannel", path: "/v1/apps/{application-id}/channels/apns_sandbox", httpMethod: .DELETE, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Disables the APNs VoIP channel for an application and deletes any existing settings for the channel.
    public func deleteApnsVoipChannel(_ input: DeleteApnsVoipChannelRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<DeleteApnsVoipChannelResponse> {
        return self.client.execute(operation: "DeleteApnsVoipChannel", path: "/v1/apps/{application-id}/channels/apns_voip", httpMethod: .DELETE, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Disables the APNs VoIP sandbox channel for an application and deletes any existing settings for the channel.
    public func deleteApnsVoipSandboxChannel(_ input: DeleteApnsVoipSandboxChannelRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<DeleteApnsVoipSandboxChannelResponse> {
        return self.client.execute(operation: "DeleteApnsVoipSandboxChannel", path: "/v1/apps/{application-id}/channels/apns_voip_sandbox", httpMethod: .DELETE, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Deletes an application.
    public func deleteApp(_ input: DeleteAppRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<DeleteAppResponse> {
        return self.client.execute(operation: "DeleteApp", path: "/v1/apps/{application-id}", httpMethod: .DELETE, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Disables the Baidu channel for an application and deletes any existing settings for the channel.
    public func deleteBaiduChannel(_ input: DeleteBaiduChannelRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<DeleteBaiduChannelResponse> {
        return self.client.execute(operation: "DeleteBaiduChannel", path: "/v1/apps/{application-id}/channels/baidu", httpMethod: .DELETE, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Deletes a campaign from an application.
    public func deleteCampaign(_ input: DeleteCampaignRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<DeleteCampaignResponse> {
        return self.client.execute(operation: "DeleteCampaign", path: "/v1/apps/{application-id}/campaigns/{campaign-id}", httpMethod: .DELETE, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Disables the email channel for an application and deletes any existing settings for the channel.
    public func deleteEmailChannel(_ input: DeleteEmailChannelRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<DeleteEmailChannelResponse> {
        return self.client.execute(operation: "DeleteEmailChannel", path: "/v1/apps/{application-id}/channels/email", httpMethod: .DELETE, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Deletes a message template for messages that were sent through the email channel.
    public func deleteEmailTemplate(_ input: DeleteEmailTemplateRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<DeleteEmailTemplateResponse> {
        return self.client.execute(operation: "DeleteEmailTemplate", path: "/v1/templates/{template-name}/email", httpMethod: .DELETE, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Deletes an endpoint from an application.
    public func deleteEndpoint(_ input: DeleteEndpointRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<DeleteEndpointResponse> {
        return self.client.execute(operation: "DeleteEndpoint", path: "/v1/apps/{application-id}/endpoints/{endpoint-id}", httpMethod: .DELETE, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Deletes the event stream for an application.
    public func deleteEventStream(_ input: DeleteEventStreamRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<DeleteEventStreamResponse> {
        return self.client.execute(operation: "DeleteEventStream", path: "/v1/apps/{application-id}/eventstream", httpMethod: .DELETE, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Disables the GCM channel for an application and deletes any existing settings for the channel.
    public func deleteGcmChannel(_ input: DeleteGcmChannelRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<DeleteGcmChannelResponse> {
        return self.client.execute(operation: "DeleteGcmChannel", path: "/v1/apps/{application-id}/channels/gcm", httpMethod: .DELETE, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Deletes a journey from an application.
    public func deleteJourney(_ input: DeleteJourneyRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<DeleteJourneyResponse> {
        return self.client.execute(operation: "DeleteJourney", path: "/v1/apps/{application-id}/journeys/{journey-id}", httpMethod: .DELETE, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Deletes a message template for messages that were sent through a push notification channel.
    public func deletePushTemplate(_ input: DeletePushTemplateRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<DeletePushTemplateResponse> {
        return self.client.execute(operation: "DeletePushTemplate", path: "/v1/templates/{template-name}/push", httpMethod: .DELETE, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Deletes an Amazon Pinpoint configuration for a recommender model.
    public func deleteRecommenderConfiguration(_ input: DeleteRecommenderConfigurationRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<DeleteRecommenderConfigurationResponse> {
        return self.client.execute(operation: "DeleteRecommenderConfiguration", path: "/v1/recommenders/{recommender-id}", httpMethod: .DELETE, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Deletes a segment from an application.
    public func deleteSegment(_ input: DeleteSegmentRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<DeleteSegmentResponse> {
        return self.client.execute(operation: "DeleteSegment", path: "/v1/apps/{application-id}/segments/{segment-id}", httpMethod: .DELETE, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Disables the SMS channel for an application and deletes any existing settings for the channel.
    public func deleteSmsChannel(_ input: DeleteSmsChannelRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<DeleteSmsChannelResponse> {
        return self.client.execute(operation: "DeleteSmsChannel", path: "/v1/apps/{application-id}/channels/sms", httpMethod: .DELETE, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Deletes a message template for messages that were sent through the SMS channel.
    public func deleteSmsTemplate(_ input: DeleteSmsTemplateRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<DeleteSmsTemplateResponse> {
        return self.client.execute(operation: "DeleteSmsTemplate", path: "/v1/templates/{template-name}/sms", httpMethod: .DELETE, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Deletes all the endpoints that are associated with a specific user ID.
    public func deleteUserEndpoints(_ input: DeleteUserEndpointsRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<DeleteUserEndpointsResponse> {
        return self.client.execute(operation: "DeleteUserEndpoints", path: "/v1/apps/{application-id}/users/{user-id}", httpMethod: .DELETE, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Disables the voice channel for an application and deletes any existing settings for the channel.
    public func deleteVoiceChannel(_ input: DeleteVoiceChannelRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<DeleteVoiceChannelResponse> {
        return self.client.execute(operation: "DeleteVoiceChannel", path: "/v1/apps/{application-id}/channels/voice", httpMethod: .DELETE, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Deletes a message template for messages that were sent through the voice channel.
    public func deleteVoiceTemplate(_ input: DeleteVoiceTemplateRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<DeleteVoiceTemplateResponse> {
        return self.client.execute(operation: "DeleteVoiceTemplate", path: "/v1/templates/{template-name}/voice", httpMethod: .DELETE, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about the status and settings of the ADM channel for an application.
    public func getAdmChannel(_ input: GetAdmChannelRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetAdmChannelResponse> {
        return self.client.execute(operation: "GetAdmChannel", path: "/v1/apps/{application-id}/channels/adm", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about the status and settings of the APNs channel for an application.
    public func getApnsChannel(_ input: GetApnsChannelRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetApnsChannelResponse> {
        return self.client.execute(operation: "GetApnsChannel", path: "/v1/apps/{application-id}/channels/apns", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about the status and settings of the APNs sandbox channel for an application.
    public func getApnsSandboxChannel(_ input: GetApnsSandboxChannelRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetApnsSandboxChannelResponse> {
        return self.client.execute(operation: "GetApnsSandboxChannel", path: "/v1/apps/{application-id}/channels/apns_sandbox", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about the status and settings of the APNs VoIP channel for an application.
    public func getApnsVoipChannel(_ input: GetApnsVoipChannelRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetApnsVoipChannelResponse> {
        return self.client.execute(operation: "GetApnsVoipChannel", path: "/v1/apps/{application-id}/channels/apns_voip", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about the status and settings of the APNs VoIP sandbox channel for an application.
    public func getApnsVoipSandboxChannel(_ input: GetApnsVoipSandboxChannelRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetApnsVoipSandboxChannelResponse> {
        return self.client.execute(operation: "GetApnsVoipSandboxChannel", path: "/v1/apps/{application-id}/channels/apns_voip_sandbox", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about an application.
    public func getApp(_ input: GetAppRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetAppResponse> {
        return self.client.execute(operation: "GetApp", path: "/v1/apps/{application-id}", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves (queries) pre-aggregated data for a standard metric that applies to an application.
    public func getApplicationDateRangeKpi(_ input: GetApplicationDateRangeKpiRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetApplicationDateRangeKpiResponse> {
        return self.client.execute(operation: "GetApplicationDateRangeKpi", path: "/v1/apps/{application-id}/kpis/daterange/{kpi-name}", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about the settings for an application.
    public func getApplicationSettings(_ input: GetApplicationSettingsRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetApplicationSettingsResponse> {
        return self.client.execute(operation: "GetApplicationSettings", path: "/v1/apps/{application-id}/settings", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about all the applications that are associated with your Amazon Pinpoint account.
    public func getApps(_ input: GetAppsRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetAppsResponse> {
        return self.client.execute(operation: "GetApps", path: "/v1/apps", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about the status and settings of the Baidu channel for an application.
    public func getBaiduChannel(_ input: GetBaiduChannelRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetBaiduChannelResponse> {
        return self.client.execute(operation: "GetBaiduChannel", path: "/v1/apps/{application-id}/channels/baidu", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about the status, configuration, and other settings for a campaign.
    public func getCampaign(_ input: GetCampaignRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetCampaignResponse> {
        return self.client.execute(operation: "GetCampaign", path: "/v1/apps/{application-id}/campaigns/{campaign-id}", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about all the activities for a campaign.
    public func getCampaignActivities(_ input: GetCampaignActivitiesRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetCampaignActivitiesResponse> {
        return self.client.execute(operation: "GetCampaignActivities", path: "/v1/apps/{application-id}/campaigns/{campaign-id}/activities", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves (queries) pre-aggregated data for a standard metric that applies to a campaign.
    public func getCampaignDateRangeKpi(_ input: GetCampaignDateRangeKpiRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetCampaignDateRangeKpiResponse> {
        return self.client.execute(operation: "GetCampaignDateRangeKpi", path: "/v1/apps/{application-id}/campaigns/{campaign-id}/kpis/daterange/{kpi-name}", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about the status, configuration, and other settings for a specific version of a campaign.
    public func getCampaignVersion(_ input: GetCampaignVersionRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetCampaignVersionResponse> {
        return self.client.execute(operation: "GetCampaignVersion", path: "/v1/apps/{application-id}/campaigns/{campaign-id}/versions/{version}", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about the status, configuration, and other settings for all versions of a campaign.
    public func getCampaignVersions(_ input: GetCampaignVersionsRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetCampaignVersionsResponse> {
        return self.client.execute(operation: "GetCampaignVersions", path: "/v1/apps/{application-id}/campaigns/{campaign-id}/versions", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about the status, configuration, and other settings for all the campaigns that are associated with an application.
    public func getCampaigns(_ input: GetCampaignsRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetCampaignsResponse> {
        return self.client.execute(operation: "GetCampaigns", path: "/v1/apps/{application-id}/campaigns", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about the history and status of each channel for an application.
    public func getChannels(_ input: GetChannelsRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetChannelsResponse> {
        return self.client.execute(operation: "GetChannels", path: "/v1/apps/{application-id}/channels", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about the status and settings of the email channel for an application.
    public func getEmailChannel(_ input: GetEmailChannelRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetEmailChannelResponse> {
        return self.client.execute(operation: "GetEmailChannel", path: "/v1/apps/{application-id}/channels/email", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves the content and settings of a message template for messages that are sent through the email channel.
    public func getEmailTemplate(_ input: GetEmailTemplateRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetEmailTemplateResponse> {
        return self.client.execute(operation: "GetEmailTemplate", path: "/v1/templates/{template-name}/email", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about the settings and attributes of a specific endpoint for an application.
    public func getEndpoint(_ input: GetEndpointRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetEndpointResponse> {
        return self.client.execute(operation: "GetEndpoint", path: "/v1/apps/{application-id}/endpoints/{endpoint-id}", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about the event stream settings for an application.
    public func getEventStream(_ input: GetEventStreamRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetEventStreamResponse> {
        return self.client.execute(operation: "GetEventStream", path: "/v1/apps/{application-id}/eventstream", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about the status and settings of a specific export job for an application.
    public func getExportJob(_ input: GetExportJobRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetExportJobResponse> {
        return self.client.execute(operation: "GetExportJob", path: "/v1/apps/{application-id}/jobs/export/{job-id}", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about the status and settings of all the export jobs for an application.
    public func getExportJobs(_ input: GetExportJobsRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetExportJobsResponse> {
        return self.client.execute(operation: "GetExportJobs", path: "/v1/apps/{application-id}/jobs/export", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about the status and settings of the GCM channel for an application.
    public func getGcmChannel(_ input: GetGcmChannelRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetGcmChannelResponse> {
        return self.client.execute(operation: "GetGcmChannel", path: "/v1/apps/{application-id}/channels/gcm", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about the status and settings of a specific import job for an application.
    public func getImportJob(_ input: GetImportJobRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetImportJobResponse> {
        return self.client.execute(operation: "GetImportJob", path: "/v1/apps/{application-id}/jobs/import/{job-id}", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about the status and settings of all the import jobs for an application.
    public func getImportJobs(_ input: GetImportJobsRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetImportJobsResponse> {
        return self.client.execute(operation: "GetImportJobs", path: "/v1/apps/{application-id}/jobs/import", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about the status, configuration, and other settings for a journey.
    public func getJourney(_ input: GetJourneyRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetJourneyResponse> {
        return self.client.execute(operation: "GetJourney", path: "/v1/apps/{application-id}/journeys/{journey-id}", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves (queries) pre-aggregated data for a standard engagement metric that applies to a journey.
    public func getJourneyDateRangeKpi(_ input: GetJourneyDateRangeKpiRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetJourneyDateRangeKpiResponse> {
        return self.client.execute(operation: "GetJourneyDateRangeKpi", path: "/v1/apps/{application-id}/journeys/{journey-id}/kpis/daterange/{kpi-name}", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves (queries) pre-aggregated data for a standard execution metric that applies to a journey activity.
    public func getJourneyExecutionActivityMetrics(_ input: GetJourneyExecutionActivityMetricsRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetJourneyExecutionActivityMetricsResponse> {
        return self.client.execute(operation: "GetJourneyExecutionActivityMetrics", path: "/v1/apps/{application-id}/journeys/{journey-id}/activities/{journey-activity-id}/execution-metrics", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves (queries) pre-aggregated data for a standard execution metric that applies to a journey.
    public func getJourneyExecutionMetrics(_ input: GetJourneyExecutionMetricsRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetJourneyExecutionMetricsResponse> {
        return self.client.execute(operation: "GetJourneyExecutionMetrics", path: "/v1/apps/{application-id}/journeys/{journey-id}/execution-metrics", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves the content and settings of a message template for messages that are sent through a push notification channel.
    public func getPushTemplate(_ input: GetPushTemplateRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetPushTemplateResponse> {
        return self.client.execute(operation: "GetPushTemplate", path: "/v1/templates/{template-name}/push", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about an Amazon Pinpoint configuration for a recommender model.
    public func getRecommenderConfiguration(_ input: GetRecommenderConfigurationRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetRecommenderConfigurationResponse> {
        return self.client.execute(operation: "GetRecommenderConfiguration", path: "/v1/recommenders/{recommender-id}", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about all the recommender model configurations that are associated with your Amazon Pinpoint account.
    public func getRecommenderConfigurations(_ input: GetRecommenderConfigurationsRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetRecommenderConfigurationsResponse> {
        return self.client.execute(operation: "GetRecommenderConfigurations", path: "/v1/recommenders", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about the configuration, dimension, and other settings for a specific segment that's associated with an application.
    public func getSegment(_ input: GetSegmentRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetSegmentResponse> {
        return self.client.execute(operation: "GetSegment", path: "/v1/apps/{application-id}/segments/{segment-id}", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about the status and settings of the export jobs for a segment.
    public func getSegmentExportJobs(_ input: GetSegmentExportJobsRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetSegmentExportJobsResponse> {
        return self.client.execute(operation: "GetSegmentExportJobs", path: "/v1/apps/{application-id}/segments/{segment-id}/jobs/export", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about the status and settings of the import jobs for a segment.
    public func getSegmentImportJobs(_ input: GetSegmentImportJobsRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetSegmentImportJobsResponse> {
        return self.client.execute(operation: "GetSegmentImportJobs", path: "/v1/apps/{application-id}/segments/{segment-id}/jobs/import", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about the configuration, dimension, and other settings for a specific version of a segment that's associated with an application.
    public func getSegmentVersion(_ input: GetSegmentVersionRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetSegmentVersionResponse> {
        return self.client.execute(operation: "GetSegmentVersion", path: "/v1/apps/{application-id}/segments/{segment-id}/versions/{version}", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about the configuration, dimension, and other settings for all the versions of a specific segment that's associated with an application.
    public func getSegmentVersions(_ input: GetSegmentVersionsRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetSegmentVersionsResponse> {
        return self.client.execute(operation: "GetSegmentVersions", path: "/v1/apps/{application-id}/segments/{segment-id}/versions", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about the configuration, dimension, and other settings for all the segments that are associated with an application.
    public func getSegments(_ input: GetSegmentsRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetSegmentsResponse> {
        return self.client.execute(operation: "GetSegments", path: "/v1/apps/{application-id}/segments", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about the status and settings of the SMS channel for an application.
    public func getSmsChannel(_ input: GetSmsChannelRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetSmsChannelResponse> {
        return self.client.execute(operation: "GetSmsChannel", path: "/v1/apps/{application-id}/channels/sms", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves the content and settings of a message template for messages that are sent through the SMS channel.
    public func getSmsTemplate(_ input: GetSmsTemplateRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetSmsTemplateResponse> {
        return self.client.execute(operation: "GetSmsTemplate", path: "/v1/templates/{template-name}/sms", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about all the endpoints that are associated with a specific user ID.
    public func getUserEndpoints(_ input: GetUserEndpointsRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetUserEndpointsResponse> {
        return self.client.execute(operation: "GetUserEndpoints", path: "/v1/apps/{application-id}/users/{user-id}", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about the status and settings of the voice channel for an application.
    public func getVoiceChannel(_ input: GetVoiceChannelRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetVoiceChannelResponse> {
        return self.client.execute(operation: "GetVoiceChannel", path: "/v1/apps/{application-id}/channels/voice", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves the content and settings of a message template for messages that are sent through the voice channel.
    public func getVoiceTemplate(_ input: GetVoiceTemplateRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<GetVoiceTemplateResponse> {
        return self.client.execute(operation: "GetVoiceTemplate", path: "/v1/templates/{template-name}/voice", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about the status, configuration, and other settings for all the journeys that are associated with an application.
    public func listJourneys(_ input: ListJourneysRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<ListJourneysResponse> {
        return self.client.execute(operation: "ListJourneys", path: "/v1/apps/{application-id}/journeys", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves all the tags (keys and values) that are associated with an application, campaign, message template, or segment.
    public func listTagsForResource(_ input: ListTagsForResourceRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<ListTagsForResourceResponse> {
        return self.client.execute(operation: "ListTagsForResource", path: "/v1/tags/{resource-arn}", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about all the versions of a specific message template.
    public func listTemplateVersions(_ input: ListTemplateVersionsRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<ListTemplateVersionsResponse> {
        return self.client.execute(operation: "ListTemplateVersions", path: "/v1/templates/{template-name}/{template-type}/versions", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about all the message templates that are associated with your Amazon Pinpoint account.
    public func listTemplates(_ input: ListTemplatesRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<ListTemplatesResponse> {
        return self.client.execute(operation: "ListTemplates", path: "/v1/templates", httpMethod: .GET, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves information about a phone number.
    public func phoneNumberValidate(_ input: PhoneNumberValidateRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<PhoneNumberValidateResponse> {
        return self.client.execute(operation: "PhoneNumberValidate", path: "/v1/phone/number/validate", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Creates a new event stream for an application or updates the settings of an existing event stream for an application.
    public func putEventStream(_ input: PutEventStreamRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<PutEventStreamResponse> {
        return self.client.execute(operation: "PutEventStream", path: "/v1/apps/{application-id}/eventstream", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Creates a new event to record for endpoints, or creates or updates endpoint data that existing events are associated with.
    public func putEvents(_ input: PutEventsRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<PutEventsResponse> {
        return self.client.execute(operation: "PutEvents", path: "/v1/apps/{application-id}/events", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Removes one or more attributes, of the same attribute type, from all the endpoints that are associated with an application.
    public func removeAttributes(_ input: RemoveAttributesRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<RemoveAttributesResponse> {
        return self.client.execute(operation: "RemoveAttributes", path: "/v1/apps/{application-id}/attributes/{attribute-type}", httpMethod: .PUT, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Creates and sends a direct message.
    public func sendMessages(_ input: SendMessagesRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<SendMessagesResponse> {
        return self.client.execute(operation: "SendMessages", path: "/v1/apps/{application-id}/messages", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Creates and sends a message to a list of users.
    public func sendUsersMessages(_ input: SendUsersMessagesRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<SendUsersMessagesResponse> {
        return self.client.execute(operation: "SendUsersMessages", path: "/v1/apps/{application-id}/users-messages", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Adds one or more tags (keys and values) to an application, campaign, message template, or segment.
    @discardableResult public func tagResource(_ input: TagResourceRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<Void> {
        return self.client.execute(operation: "TagResource", path: "/v1/tags/{resource-arn}", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Removes one or more tags (keys and values) from an application, campaign, message template, or segment.
    @discardableResult public func untagResource(_ input: UntagResourceRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<Void> {
        return self.client.execute(operation: "UntagResource", path: "/v1/tags/{resource-arn}", httpMethod: .DELETE, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Enables the ADM channel for an application or updates the status and settings of the ADM channel for an application.
    public func updateAdmChannel(_ input: UpdateAdmChannelRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<UpdateAdmChannelResponse> {
        return self.client.execute(operation: "UpdateAdmChannel", path: "/v1/apps/{application-id}/channels/adm", httpMethod: .PUT, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Enables the APNs channel for an application or updates the status and settings of the APNs channel for an application.
    public func updateApnsChannel(_ input: UpdateApnsChannelRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<UpdateApnsChannelResponse> {
        return self.client.execute(operation: "UpdateApnsChannel", path: "/v1/apps/{application-id}/channels/apns", httpMethod: .PUT, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Enables the APNs sandbox channel for an application or updates the status and settings of the APNs sandbox channel for an application.
    public func updateApnsSandboxChannel(_ input: UpdateApnsSandboxChannelRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<UpdateApnsSandboxChannelResponse> {
        return self.client.execute(operation: "UpdateApnsSandboxChannel", path: "/v1/apps/{application-id}/channels/apns_sandbox", httpMethod: .PUT, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Enables the APNs VoIP channel for an application or updates the status and settings of the APNs VoIP channel for an application.
    public func updateApnsVoipChannel(_ input: UpdateApnsVoipChannelRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<UpdateApnsVoipChannelResponse> {
        return self.client.execute(operation: "UpdateApnsVoipChannel", path: "/v1/apps/{application-id}/channels/apns_voip", httpMethod: .PUT, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Enables the APNs VoIP sandbox channel for an application or updates the status and settings of the APNs VoIP sandbox channel for an application.
    public func updateApnsVoipSandboxChannel(_ input: UpdateApnsVoipSandboxChannelRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<UpdateApnsVoipSandboxChannelResponse> {
        return self.client.execute(operation: "UpdateApnsVoipSandboxChannel", path: "/v1/apps/{application-id}/channels/apns_voip_sandbox", httpMethod: .PUT, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Updates the settings for an application.
    public func updateApplicationSettings(_ input: UpdateApplicationSettingsRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<UpdateApplicationSettingsResponse> {
        return self.client.execute(operation: "UpdateApplicationSettings", path: "/v1/apps/{application-id}/settings", httpMethod: .PUT, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Enables the Baidu channel for an application or updates the status and settings of the Baidu channel for an application.
    public func updateBaiduChannel(_ input: UpdateBaiduChannelRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<UpdateBaiduChannelResponse> {
        return self.client.execute(operation: "UpdateBaiduChannel", path: "/v1/apps/{application-id}/channels/baidu", httpMethod: .PUT, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Updates the configuration and other settings for a campaign.
    public func updateCampaign(_ input: UpdateCampaignRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<UpdateCampaignResponse> {
        return self.client.execute(operation: "UpdateCampaign", path: "/v1/apps/{application-id}/campaigns/{campaign-id}", httpMethod: .PUT, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Enables the email channel for an application or updates the status and settings of the email channel for an application.
    public func updateEmailChannel(_ input: UpdateEmailChannelRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<UpdateEmailChannelResponse> {
        return self.client.execute(operation: "UpdateEmailChannel", path: "/v1/apps/{application-id}/channels/email", httpMethod: .PUT, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Updates an existing message template for messages that are sent through the email channel.
    public func updateEmailTemplate(_ input: UpdateEmailTemplateRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<UpdateEmailTemplateResponse> {
        return self.client.execute(operation: "UpdateEmailTemplate", path: "/v1/templates/{template-name}/email", httpMethod: .PUT, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Creates a new endpoint for an application or updates the settings and attributes of an existing endpoint for an application. You can also use this operation to define custom attributes for an endpoint. If an update includes one or more values for a custom attribute, Amazon Pinpoint replaces (overwrites) any existing values with the new values.
    public func updateEndpoint(_ input: UpdateEndpointRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<UpdateEndpointResponse> {
        return self.client.execute(operation: "UpdateEndpoint", path: "/v1/apps/{application-id}/endpoints/{endpoint-id}", httpMethod: .PUT, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Creates a new batch of endpoints for an application or updates the settings and attributes of a batch of existing endpoints for an application. You can also use this operation to define custom attributes for a batch of endpoints. If an update includes one or more values for a custom attribute, Amazon Pinpoint replaces (overwrites) any existing values with the new values.
    public func updateEndpointsBatch(_ input: UpdateEndpointsBatchRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<UpdateEndpointsBatchResponse> {
        return self.client.execute(operation: "UpdateEndpointsBatch", path: "/v1/apps/{application-id}/endpoints", httpMethod: .PUT, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Enables the GCM channel for an application or updates the status and settings of the GCM channel for an application.
    public func updateGcmChannel(_ input: UpdateGcmChannelRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<UpdateGcmChannelResponse> {
        return self.client.execute(operation: "UpdateGcmChannel", path: "/v1/apps/{application-id}/channels/gcm", httpMethod: .PUT, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Updates the configuration and other settings for a journey.
    public func updateJourney(_ input: UpdateJourneyRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<UpdateJourneyResponse> {
        return self.client.execute(operation: "UpdateJourney", path: "/v1/apps/{application-id}/journeys/{journey-id}", httpMethod: .PUT, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Cancels (stops) an active journey.
    public func updateJourneyState(_ input: UpdateJourneyStateRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<UpdateJourneyStateResponse> {
        return self.client.execute(operation: "UpdateJourneyState", path: "/v1/apps/{application-id}/journeys/{journey-id}/state", httpMethod: .PUT, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Updates an existing message template for messages that are sent through a push notification channel.
    public func updatePushTemplate(_ input: UpdatePushTemplateRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<UpdatePushTemplateResponse> {
        return self.client.execute(operation: "UpdatePushTemplate", path: "/v1/templates/{template-name}/push", httpMethod: .PUT, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Updates an Amazon Pinpoint configuration for a recommender model.
    public func updateRecommenderConfiguration(_ input: UpdateRecommenderConfigurationRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<UpdateRecommenderConfigurationResponse> {
        return self.client.execute(operation: "UpdateRecommenderConfiguration", path: "/v1/recommenders/{recommender-id}", httpMethod: .PUT, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Creates a new segment for an application or updates the configuration, dimension, and other settings for an existing segment that's associated with an application.
    public func updateSegment(_ input: UpdateSegmentRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<UpdateSegmentResponse> {
        return self.client.execute(operation: "UpdateSegment", path: "/v1/apps/{application-id}/segments/{segment-id}", httpMethod: .PUT, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Enables the SMS channel for an application or updates the status and settings of the SMS channel for an application.
    public func updateSmsChannel(_ input: UpdateSmsChannelRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<UpdateSmsChannelResponse> {
        return self.client.execute(operation: "UpdateSmsChannel", path: "/v1/apps/{application-id}/channels/sms", httpMethod: .PUT, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Updates an existing message template for messages that are sent through the SMS channel.
    public func updateSmsTemplate(_ input: UpdateSmsTemplateRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<UpdateSmsTemplateResponse> {
        return self.client.execute(operation: "UpdateSmsTemplate", path: "/v1/templates/{template-name}/sms", httpMethod: .PUT, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Changes the status of a specific version of a message template to active.
    public func updateTemplateActiveVersion(_ input: UpdateTemplateActiveVersionRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<UpdateTemplateActiveVersionResponse> {
        return self.client.execute(operation: "UpdateTemplateActiveVersion", path: "/v1/templates/{template-name}/{template-type}/active-version", httpMethod: .PUT, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Enables the voice channel for an application or updates the status and settings of the voice channel for an application.
    public func updateVoiceChannel(_ input: UpdateVoiceChannelRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<UpdateVoiceChannelResponse> {
        return self.client.execute(operation: "UpdateVoiceChannel", path: "/v1/apps/{application-id}/channels/voice", httpMethod: .PUT, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Updates an existing message template for messages that are sent through the voice channel.
    public func updateVoiceTemplate(_ input: UpdateVoiceTemplateRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) -> EventLoopFuture<UpdateVoiceTemplateResponse> {
        return self.client.execute(operation: "UpdateVoiceTemplate", path: "/v1/templates/{template-name}/voice", httpMethod: .PUT, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }
}

extension Pinpoint {
    /// Initializer required by `AWSService.with(middlewares:timeout:byteBufferAllocator:options)`. You are not able to use this initializer directly as there are no public
    /// initializers for `AWSServiceConfig.Patch`. Please use `AWSService.with(middlewares:timeout:byteBufferAllocator:options)` instead.
    public init(from: Pinpoint, patch: AWSServiceConfig.Patch) {
        self.client = from.client
        self.config = from.config.with(patch: patch)
    }
}
